package com.ruoyi.ldzlsb.mapper;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.ldzlsb.domain.SbEquipment;
import com.ruoyi.ldzlsb.domain.vo.SbEquipmentVo;

/**
 * 设备管理Mapper接口
 * 
 * @author ruoyi
 */
public interface SbEquipmentMapper 
{
    /**
     * 查询设备管理
     * 
     * @param equipmentId 设备管理主键
     * @return 设备管理
     */
    public SbEquipment selectSbEquipmentByEquipmentID(Long equipmentId);

    /**
     * 查询设备管理列表
     * 
     * @param sbEquipment 设备管理
     * @return 设备管理集合
     */
    public List<SbEquipment> selectSbEquipmentEntityList(SbEquipment sbEquipment);

    /**
     * 新增设备管理
     * 
     * @param sbEquipment 设备管理
     * @return 结果
     */
    public int insertSbEquipment(SbEquipment sbEquipment);

    /**
     * 修改设备管理
     * 
     * @param sbEquipment 设备管理
     * @return 结果
     */
    public int updateSbEquipment(SbEquipment sbEquipment);

    /**
     * 删除设备管理
     * 
     * @param equipmentId 设备管理主键
     * @return 结果
     */
    public int deleteSbEquipmentByEquipmentID(Long equipmentId);

    /**
     * 批量删除设备管理
     * 
     * @param equipmentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSbEquipmentByEquipmentIDs(Long[] equipmentIds);

    /**
     * 检查设备编码是否存在
     * 
     * @param equipmentCode 设备编码
     * @return 结果
     */
    public int checkEquipmentCodeExists(@Param("equipmentCode") String equipmentCode);
    
    /**
     * 检查序列号是否存在
     * 
     * @param serialNumber 序列号
     * @return 结果
     */
    public int checkSerialNumberExists(@Param("serialNumber") String serialNumber);
    
    /**
     * 获取设备状态统计
     * 
     * @return 状态统计
     */
    public List<Map<String, Object>> selectEquipmentStatusCount();
    
    /**
     * 获取车间设备状态统计
     * 
     * @return 车间状态统计
     */
    public List<Map<String, Object>> selectEquipmentWorkshopStatusCount();
    
    /**
     * 获取设备数量统计
     * 
     * @return 设备数量
     */
    public int selectEquipmentCount();
    
    /**
     * 获取临近保修期的设备列表
     * 
     * @param days 天数
     * @return 设备列表
     */
    public List<SbEquipment> selectNearWarrantyEndEquipments(@Param("days") int days);
    
    /**
     * 逻辑删除设备
     * 
     * @param equipmentId 设备ID
     * @return 结果
     */
    public int logicDeleteSbEquipment(Long equipmentId);
    
    /**
     * 查询设备管理列表（VO）
     * 
     * @param sbEquipmentVo 设备管理VO
     * @return 设备管理集合
     */
    public List<SbEquipmentVo> selectSbEquipmentList(SbEquipmentVo sbEquipmentVo);

    /**
     * 检查设备编码是否已存在（排除自身ID）
     * 
     * @param equipmentCode 设备编码
     * @param equipmentId 设备ID（需要排除的ID）
     * @return 结果
     */
    public int checkEquipmentCodeExistsExcludeSelf(@Param("equipmentCode") String equipmentCode, @Param("equipmentId") Long equipmentId);
}
